package paquetes.manager;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.util.List;

import paquetes.interfazRemota.PuntoDeVentaController;
import paquetes.negocioVO.*;


@SuppressWarnings("deprecation")
public class AdministradorPedido
{	
	private PuntoDeVentaController oficinaVentas;
	private static AdministradorPedido instancia;
	
	public static AdministradorPedido getInstancia()
	{
		if(instancia==null)
			instancia = new AdministradorPedido();
		return instancia;
	}
	
	private AdministradorPedido()
	{
		try {
			
			/*
			 System.setProperty("java.security.policy","C:/Users/Emiliano/Desktop/TP/Paquetes_Cliente/src/java.policy");
				
			System.setProperty("java.rmi.server.codebase","file:C:/Users/Emiliano/Desktop/TP/Paquetes_Repositorio/src/paquetes/");
				
			System.setSecurityManager(new RMISecurityManager());
			if (System.getSecurityManager() == null)
				   System.setSecurityManager(new RMISecurityManager());
			*/
			System.setProperty("java.security.policy","C:/Users/Emiliano/Desktop/TP/Paquetes_Cliente/src/java.policy");
			System.setProperty("java.rmi.server.hostname","127.0.0.1");
			System.setProperty("java.rmi.server.codebase","file:C:/Users/Emiliano/Desktop/TP/Paquetes_Repositorio/src/paquetes/");
			
			
			oficinaVentas = (PuntoDeVentaController) Naming.lookup("//localhost/TPO_Paquetes_PuntoDeVenta");
			System.out.println("Tengo el punto de Venta");
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
	}

	public List<ServicioAdicionalVO> listarServiciosAdicionales() {
        try {
			return oficinaVentas.listarServiciosAdicionales();
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;

	}
	
	public List<ServicioAdicionalVO> obtenerServiciosAdicionalesDePedido(PedidoVO p) {
        try {
			return oficinaVentas.obtenerServiciosAdicionalesDePedido(p);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;

	}
	
	public PedidoVO precalcularPedidoClienteRegular(PedidoVO p) {
        try {
			return oficinaVentas.precalcularPedidoClienteRegular(p);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;

	}
	
	public PedidoVO precalcularPedidoClienteEventual(PedidoVO p) {
        try {
			return oficinaVentas.precalcularPedidoClienteRegular(p);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;

	}

	public PedidoVO buscarPedido(long id) {
        try {
			return oficinaVentas.buscarPedido(id);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;

	}
	
	public FacturaVO confirmarPedido(PedidoVO p)  {
        try {
			return oficinaVentas.confirmarPedido(p);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;

	}
	
	public FacturaVO buscarFactura(long f)  {
        try {
			return oficinaVentas.buscarFactura(f);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;

	}
	
	 
	 public void abonarFactura(FacturaVO f,MedioPagoFactura m)  {
        try {
			oficinaVentas.abonarFactura(f, m);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}
	 
	 public ListaDePrecioVO obtenerListaDePrecioVigente(PedidoVO p)  {
	        try {
				return oficinaVentas.obtenerListaDePrecioVigente(p);
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return null;
	 }
	
	public List<FacturaVO> getFacturas()  {
        try {
			return oficinaVentas.getFacturas();
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return null;
		

	}
	
	public void generarFactura(PedidoVO p)  {
        try {
			oficinaVentas.generarFactura(p);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}
	
	public void AltaDeProducto(String descripcion, int dimensionX,
			int dimensionY, int dimensionZ, String fragilidad,
			String peligrosidad, int refrigeracion, int apilable){
        try {
			oficinaVentas.AltaDeProducto(descripcion,dimensionX,dimensionY,dimensionZ,fragilidad,peligrosidad,refrigeracion,apilable);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

	public List<ProductoVO> obtenerProductos() {
		try {
			oficinaVentas.obtenerProductos();
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public ProductoVO obtenerProducto(int id) {
		try {
			return oficinaVentas.obtenerProducto(id);
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public void actualizarProducto(String descripcion, int dimensionX, int dimensionY,
			int dimensionZ, int fragilidad, int peligrosidad,
			int refrigeracion, int apilable) {
		try {
			oficinaVentas.editarProducto(descripcion,dimensionX,dimensionY,dimensionZ,fragilidad,peligrosidad,refrigeracion,apilable);
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public void bajaProducto(int id) {
		try {
			oficinaVentas.bajaProducto(id);
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void AltaDeReceptor(String nombre, String apellido, String documento) {
		try {
			oficinaVentas.AltaDeReceptor(nombre,apellido,documento);
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public void AltaDeServicioAdicional(String descripcion) {
		try {
			oficinaVentas.AltaDeServicioAdicional(descripcion);
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public void AltaDeManifiesto(byte[] escaneo, String tipoFragilidad,
			String tipoPeligrosidad, int dimensionX, int dimensionY,
			int dimensionZ, int refrigeracion, String indicaciones) {
		try {
			oficinaVentas.AltaDeManifiesto(escaneo,tipoFragilidad,
					tipoPeligrosidad,dimensionX,dimensionY,
					dimensionZ,refrigeracion,indicaciones);
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public List<ReceptorAutorizadoVO> obtenerReceptores() {
		try {
			return oficinaVentas.obtenerReceptoresAutorizados();
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public ReceptorAutorizadoVO obtenerReceptor(int id) {
		try {
			return oficinaVentas.obtenerReceptorAutorizado(id);
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public List<ServicioAdicionalVO> obtenerServicios() {
		try {
			return oficinaVentas.listarServiciosAdicionales();
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public ServicioAdicionalVO obtenerServicio(int id) {
		try {
			return oficinaVentas.obtenerServicioAdicional(id);
			} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
		
}
	 
	

	
	

	
	

